#ifndef DW_GRAFFITI_CONTEXT_H
#	define DW_GRAFFITI_CONTEXT_H

namespace dw {

	namespace system {
		class Window;
	} // namespace system
	
	namespace graffiti {

struct ContextSetup
{
	static const ContextSetup Default;

	enum Flags
	{
		Flag_Debug = 0x1,
		Flag_ForwardCompatible = 0x2
	};

	enum Profiles
	{
		Profile_Core = 0x1,
		Profile_Compatible = 0x2
	};

	dw::uint32 majorVersion;
	dw::uint32 minorVersion;

	dw::uint32 flags;
	dw::uint32 profile;

	dw::uint8 depthBits;
	dw::uint8 stencilBits;
};

struct Context
{
public : //! @name State
	//! @{
	bool isValid() const ;

	HDC getDeviceContext() const ;
	//! @}

private : //! @name Construction & Destruction
	//! @{
	Context();
	Context(const ContextSetup& setup);
	Context(const Context& ref);

	friend class Renderer;
	//! @}

private : //! @name Data
	//! @{
	ContextSetup m_setup;
	HDC m_deviceContext;
	HGLRC m_renderContext;
	//! @}
};

	} // namespace graffiti
} // namespace dw

#endif // !DW_GRAFFITI_CONTEXT_H
